import { makeAutoObservable } from 'mobx';
import * as api from './api';

export default class DictTreeStore {
  treeData = {}; // itemId = {dictItem}
  treeSelectedId = ''; // selected itemId

  constructor(rootStore) {
    this.rootStore = rootStore;
    makeAutoObservable(this);
  }

  /**
   * 创建字典
   * @param {*} dictItem 待添加的字典
   * @returns 创建后的字典
   */
  create(dictItem) {
    return api.createDictItem(dictItem).then((d) => {
      return d;
    });
  }

  /**
   * 创建字典
   * @param {*} dictItem 待添加的字典
   * @returns 创建后的字典
   */
  update(dictItem) {
    return api.updateDictItem(dictItem).then((d) => {
      // 修改本地treeData
      this.treeData[d.itemId] = d;
      return d;
    });
  }

  delete(dictId, itemId) {
    return api.deleteDictItem(dictId, itemId).then((d) => {
      // 修改本地treeData
      delete this.treeData[d.itemId];
      return d;
    });
  }

  // tree相关============================
  /**
   * 获取顶级节点
   * @param {string} dictId 字典标识
   * @returns items列表
   */
  top(dictId) {
    return api.getTopItems(dictId).then((items) => {
      Object.assign(this.treeData, Util.toMap(items, 'itemId'));
      console.log('===top', toJS(this.treeData), items);
      return items;
    });
  }

  /**
   * 获取子节点
   * @param {string} dictId 字典标识
   * @param {*} parentId 父项标识
   * @returns items列表
   */
  children(dictId, parentId) {
    return api.getChildren(dictId, parentId).then((items) => {
      Object.assign(this.treeData, Util.toMap(items, 'itemId'));
      console.log('===children', items, toJS(this.treeData));
      return items;
    });
  }

  /**
   * 为tree返回指定条目
   * @param {*} itemId 字典项标识
   * @returns 字典项
   */
  treeItem(itemId) {
    return this.treeData[itemId];
  }

  /**
   * 返回选中条目
   * @returns dictItem
   */
  get selectedItem() {
    return this.treeItem(this.treeSelectedId);
  }

  /**
   * 设置选中项标识
   * @param {string} itemId 选中项的标识
   */
  setSelectedId(itemId) {
    this.treeSelectedId = itemId;
  }

  getDict(dictId) {
    return api.getDict(dictId);
  }


}
